package com.rrd.hive.udf;

import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;

/**
*
*@author liubaoxin
*@date 2019年11月13日
*/
public class CheckPhoneUDF  extends UDF{
	Pattern pattern = Pattern.compile("^((0[0-9]{2,3}\\-)([0-9]{7,8})+)(\\-[0-9]{1,4})?$");
	private static String PHONE_REGEX="^((0[0-9]{2,3}\\-)([0-9]{7,8})+)(\\-[0-9]{1,4})?$";
	private static List<String> list = new ArrayList<String>(100); //4位区号
	private static List<String> shortList = new ArrayList<String>(100); //3位区号
	
	static{
		shortList.add("010");
		shortList.add("021");
		shortList.add("022");
		shortList.add("023");
		shortList.add("852");
		shortList.add("853");
		shortList.add("024");
		shortList.add("027");
		shortList.add("025");
		shortList.add("020");
		shortList.add("028");
		shortList.add("029");
		list.add("031");
		list.add("033");
		list.add("057");
		list.add("058");
		list.add("024");
		list.add("041");
		list.add("042");
		list.add("027");
		list.add("071");
		list.add("072");
		list.add("025");
		list.add("051");
		list.add("052");
		list.add("047");
		list.add("048");
		list.add("079");
		list.add("070");
		list.add("035");
		list.add("093");
		list.add("053");
		list.add("045");
		list.add("059");
		list.add("020");
		list.add("075");
		list.add("076");
		list.add("066");
		list.add("028");
		list.add("081");
		list.add("082");
		list.add("083");
		list.add("084"); 
		list.add("073");
		list.add("074");
		list.add("037");
		list.add("039");
		list.add("087");
		list.add("088");
		list.add("055");
		list.add("056");
		list.add("095");
		list.add("043");
		list.add("044");
		list.add("077");
		list.add("085");
		list.add("029");
		list.add("091");
		list.add("097");
		list.add("089");
		list.add("099");
		list.add("090"); 
	}
	public Text evaluate(String phone)
            throws UnsupportedEncodingException {
		Text text = new Text("");
		if(phone!=null && phone.length()>3){
			String[] arr=phone.split("-");
			 
			if((arr[0].length()==3 && shortList.contains(arr[0])) || (arr[0].length()==4 && list.contains(arr[0].substring(0, 3)))){
				if(pattern.matcher(phone).matches()){
					text.set(phone); 
				}
			} 
			
		} 
        return text;
    }
	public static void main(String[] args) {
		Pattern pattern = Pattern.compile("^((0[0-9]{2,3}\\-)([0-9]{7,8})+)(\\-[0-9]{1,4})?$");
		String regex="^((0[0-9]{2,3}\\-)([0-9]{7,8})+)(\\-[0-9]{1,4})?$";
		Matcher matcher = pattern.matcher("0312-4321211");
		String phone="0312-343221122";
		if(Pattern.matches(regex, phone)){
			System.out.println("OK");
		}
		if(matcher.matches()){
			System.out.println("matches");
		} 
	}
}
